'''
【程序11】
题目：古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，小兔子长到第三个月
　　　后每个月又生一对兔子，假如兔子都不死，问每个月的兔子总数为多少？
1.程序分析：　兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码：


#方法1：
f1 = 1
f2 = 1
for i in range(1,21):
    print ('%12d %12d' % (f1,f2))
    if (i % 2) == 0:
        print ('')
    f1 = f1 + f2
    f2 = f1 + f2
    '''
#一只青蛙一次可以跳上1级台阶，也可跳上2级，求青蛙跳上n级台阶共有几种跳法
#方法2：
def fib(i):
    if i < 2:
        return 1
    return fib(i-1) + fib(i-2)
print(fib(7))   #斐波那契数列
'''
import matplotlib.pyplot as plt
import time
n=36
x=[]
y=[]
t1=time.time()
for i in range(1,n):
    x.append(i)
    y.append(fib(i))
t2=time.time()
print(t2-t1,'s')
plt.plot(x,y)
plt.show()
'''
#变态台阶，青蛙变为可以跳上1级、2级、...n级台阶
#fib = lambda n: n if n < 2 else 2 * fib(n - 1)
#print(fib(7))   #等比数列，公比2
from concurrent.futures import ThreadPoolExecutor,as_completed
from time import time
# li = [i for i in range(35)]
start = time()
li = []
with ThreadPoolExecutor(max_workers=10) as t:
    for i in range(35):
        taski = t.submit(fib,i)
        li.append(taski)
    while len(li)>0:
        for j in li:
            if j.done():
                print(j.result())
                li.remove(j)

# executor = ThreadPoolExecutor(max_workers=5)
# results = executor.map(fib,li)
# for i,res in enumerate(results):
#     print("task{}:{}".format(i+1,res))
print(time()-start)